event store裡的metadata 先前沒有用到,這個推測是application layer使用,不是Domain Event本身內容,如api接到的user登入訊息,時間點或IP等,以下試試看內容:
準備meta,模擬APP狀態:
let mut meta = HashMap::<String, String>::new();
meta.insert("user".to_string(), "admin".to_string());
meta.insert("ip".to_string(), "1.1.1.1".to_string());
meta.insert("timestamp".to_string(), "2023-10-10 12:00:00".to_string());
先前執行指令時使用的是execute
,改執行execute_with_metadata
就可以傳入meta資訊:
let _ = reader_cqrs.execute_with_metadata("test-reader-1", ReaderCommand::CreateReader {
name: "John Smith".to_string(),
},meta).await;
查看序列化後的結果:
======== [Source of Truth] Events ========
[
SerializedEvent {
aggregate_id: "test-reader-1",
sequence: 1,
aggregate_type: "Reader",
event_type: "ReaderEvent",
event_version: "0.1.0",
payload: Object {
"ReaderCreated": Object {
"id": String("6795170c-f0ad-4736-94a7-1c641f1ae924"),
"name": String("John Smith"),
},
},
metadata: Object {
"ip": String("1.1.1.1"),
"timestamp": String("2023-10-10 12:00:00"),
"user": String("admin"),
},
}
]
可以看到meta順帶一起紀錄著,方便查找問題時使用。